﻿using System;
using l1cs.server.model;
using l1cs.server.model.Instance;

namespace l1cs.server.serverpackets
{
    public class S_PetMenuPacket : ServerBasePacket
    {
        private byte[] _byte = null;

        public S_PetMenuPacket( L1NpcInstance npc, int exppercet )
        {
            buildpacket( npc, exppercet );
        }

        private void buildpacket( L1NpcInstance npc, int exppercet )
        {
            writeC( Opcodes.S_OPCODE_SHOWHTML );

            if ( npc is L1PetInstance )
            { // ペット
                L1PetInstance pet = (L1PetInstance)npc;
                writeD( pet.getId() );
                writeS( "anicom" );
                writeC( 0x00 );
                writeH( 10 );
                switch ( pet.getCurrentPetStatus() )
                {
                    case 1:
                        writeS( "$469" ); // 攻撃態勢
                        break;
                    case 2:
                        writeS( "$470" ); // 防御態勢
                        break;
                    case 3:
                        writeS( "$471" ); // 休憩
                        break;
                    case 5:
                        writeS( "$472" ); // 警戒
                        break;
                    default:
                        writeS( "$471" ); // 休憩
                        break;
                }
                writeS( Convert.ToString( pet.getCurrentHp() ) ); // 現在のＨＰ
                writeS( Convert.ToString( pet.getMaxHp() ) ); // 最大ＨＰ
                writeS( Convert.ToString( pet.getCurrentMp() ) ); // 現在のＭＰ
                writeS( Convert.ToString( pet.getMaxMp() ) ); // 最大ＭＰ
                writeS( Convert.ToString( pet.getLevel() ) ); // レベル

                // 名前の文字数が8を超えると落ちる
                // なぜか"セント バーナード","ブレイブ ラビット"はOK
                // String pet_name = pet.get_name();
                // if (pet_name.equalsIgnoreCase("ハイ ドーベルマン")) {
                // pet_name = "ハイ ドーベルマ";
                // }
                // else if (pet_name.equalsIgnoreCase("ハイ セントバーナード")) {
                // pet_name = "ハイ セントバー";
                // }
                // writeS(pet_name);
                writeS( "" ); // ペットの名前を表示させると不安定になるので、非表示にする
                writeS( "$611" ); // お腹いっぱい
                writeS( Convert.ToString( exppercet ) ); // 経験値
                writeS( Convert.ToString( pet.getLawful() ) ); // アライメント
            }
            else if ( npc is L1SummonInstance )
            { // サモンモンスター
                L1SummonInstance summon = (L1SummonInstance)npc;
                writeD( summon.getId() );
                writeS( "moncom" );
                writeC( 0x00 );
                writeH( 6 ); // 渡す引数文字の数の模様
                switch ( summon.get_currentPetStatus() )
                {
                    case 1:
                        writeS( "$469" ); // 攻撃態勢
                        break;
                    case 2:
                        writeS( "$470" ); // 防御態勢
                        break;
                    case 3:
                        writeS( "$471" ); // 休憩
                        break;
                    case 5:
                        writeS( "$472" ); // 警戒
                        break;
                    default:
                        writeS( "$471" ); // 休憩
                        break;
                }
                writeS( Convert.ToString( summon.getCurrentHp() ) ); // 現在のＨＰ
                writeS( Convert.ToString( summon.getMaxHp() ) ); // 最大ＨＰ
                writeS( Convert.ToString( summon.getCurrentMp() ) ); // 現在のＭＰ
                writeS( Convert.ToString( summon.getMaxMp() ) ); // 最大ＭＰ
                writeS( Convert.ToString( summon.getLevel() ) ); // レベル
                // writeS(summon.getNpcTemplate().get_nameid());
                // writeS(Integer.toString(0));
                // writeS(Integer.toString(790));
            }
        }

        override
        public byte[] getContent()
        {
            if ( _byte == null )
            {
                _byte = _bao.ToArray();
            }

            return _byte;
        }

        override public String getType()
        {
            return "[S] S_PetMenuPacket";
        }
    }
}